package com.atguigu.sparsearray;

public class SparseArray {
    public static void main(String[] args) {
        int[][] arr=new int[11][11];
        arr[1][2]=1;
        arr[3][4]=2;
        arr[5][6]=1;
        SparseArray sparseArray = new SparseArray();
        sparseArray.printArr(arr);

        int[][] sparseArr = sparseArray.twoDimenArr2sparseArr(arr);
        sparseArray.printArr(sparseArr);

        int[][] twoDimenArr = sparseArray.spareArr2TwoDimenArr(sparseArr);
        sparseArray.printArr(twoDimenArr);
    }

    private int[][] twoDimenArr2sparseArr(int[][] td){
        int sum=0;
        for (int i = 0; i < td.length; i++) {
            for(int j=0;j<td[i].length;j++){
                if (td[i][j]!=0) {
                    sum++;
                }
            }
        }

        int[][] sa=new int[sum+1][3];
        sa[0]=new int[]{td.length,td[0].length,sum};
        int count=0;
        for (int i = 0; i < td.length; i++) {
            for(int j=0;j<td[i].length;j++){
                if (td[i][j]!=0) {
                    sa[++count]=new int[]{i,j,td[i][j]};
                }
            }
        }

        return sa;
    }

    private int[][] spareArr2TwoDimenArr(int[][] sa){
        int[][] td=new int[sa[0][0]][sa[0][1]];

        for(int i=1;i<sa.length;i++){
            td[sa[i][0]][sa[i][1]]=sa[i][2];
        }

        return td;
    }

    private void printArr(int[][] arr){
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[0].length;j++){
                System.out.printf("%d\t",arr[i][j]);
            }
            System.out.println();
        }
    }
}
